﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KBManagement.DAL;
using KBManagement.Library;

namespace KBManagement
{
    public partial class DialogStoreMain : Form,InforObserver
    {
        KBSQLClassDataContext context;
        private StoreTemp storeTemp;
        Store aStore;
        public DialogStoreMain(StoreTemp storeTemp)
        {
            this.storeTemp = storeTemp;
            context = new KBSQLClassDataContext();
            InitializeComponent();
            SelectWareHouse();
        }


        private void SelectWareHouse()
        {
            var WareHouse = from fc in context.Stores select fc;
            dgvWareHouse.DataSource = WareHouse;
            dgvWareHouse.Columns[0].HeaderText = "Mã số";
            dgvWareHouse.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgvWareHouse.Columns[1].HeaderText = "Tên sản phẩm";
            dgvWareHouse.Columns[2].HeaderText = "Số lượng";
            dgvWareHouse.Columns[3].HeaderText = "Cảnh báo";
            dgvWareHouse.Columns[4].HeaderText = "Đơn vị";
            dgvWareHouse.Columns[5].HeaderText = "Số lượng tiêu chuẩn";
            btnOk.Enabled = false;

        }

        private void dgvWareHouse_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                string unit = dgvWareHouse.Rows[e.RowIndex].Cells[4].Value.ToString();
                lblIdStore.Text = dgvWareHouse.Rows[e.RowIndex].Cells[0].Value.ToString();
                lblNameProduct.Text = dgvWareHouse.Rows[e.RowIndex].Cells[1].Value.ToString();
                label6.Text = dgvWareHouse.Rows[e.RowIndex].Cells[2].Value.ToString() + " " + unit;
                lblWarning.Text = dgvWareHouse.Rows[e.RowIndex].Cells[3].Value.ToString();
                lblUnit.Text = unit;
                btnOk.Enabled = true;
                if (Convert.ToInt32(dgvWareHouse.Rows[e.RowIndex].Cells[2].Value) <= 0)
                {
                    txtAmount.Enabled = false;
                }
                else
                {
                    txtAmount.Enabled = true;
                }

            }
            catch (Exception)
            { }
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            try
            {
                aStore = context.Stores.SingleOrDefault(sto => sto.ID == lblIdStore.Text);
                bool isValid = validate();
                if (!isValid)
                {
                    return;
                }
                ConfirmExport confirm = new ConfirmExport(lblNameProduct.Text, txtAmount.Text + " " + label6.Text);
                if (confirm.ShowDialog() == DialogResult.OK)
                {
                    Export();   
                    UpdateStoreTemp();
                    InsertStockLog(false, Convert.ToDouble(txtAmount.Text), Convert.ToDecimal("0"));
                    context.SubmitChanges();
                    Utils.CreateInstanceLog().TransactionLogCommon("Nhân viên " + AdminSession.admin.UserName + " lấy ra từ kho hàng mã số "+lblIdStore.Text+" " + txtAmount.Text + " "+ lblUnit.Text+ " "+lblNameProduct.Text +" vào lúc " + DateTime.Now);
                    Utils.CreateInstance().NotificationInforObserver();
                    txtAmount.Text = "";
                    Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Thông tin bạn nhập có thể không lưu được vì xảy ra lỗi.Lỗi đã được hệ thống ghi lại và chờ xử lý"+ex.Message.ToString());
            }
        }


        public Boolean validate()
        {
            if (Utils.CreateInstance().isNull(txtAmount.Text))
            {
                MessageBox.Show("Hãy điền vào số lượng");
                return false;
            }
            if (!Utils.CreateInstance().isNumberDouble(txtAmount.Text))
            {
                MessageBox.Show("Số lượng không đúng định dạng");
                return false;
            }
            if (aStore.Quantity <= 0)
            {
                MessageBox.Show("Trong kho đã hết hàng");
                return false;
            }
            if (aStore.Quantity < Convert.ToDouble(txtAmount.Text))
            {
                MessageBox.Show("Trong kho còn ít hơn số lượng bạn lấy");
                return false;
            }
            if (Convert.ToDouble(txtAmount.Text)<=0)
            {
                MessageBox.Show("Số lượng phải lớn hơn 0");
                return false;
            }

            return true;
        }


        private void UpdateStoreTemp()
        {
            StoreTemp sTemp = context.StoreTemps.SingleOrDefault(x => x.Store.ID == lblIdStore.Text);
            sTemp.Quantity = sTemp.Quantity + Convert.ToInt32(txtAmount.Text);
            sTemp.Warning = "";
        }

        private void Export()
        {
            aStore.Quantity = aStore.Quantity - Convert.ToInt32(txtAmount.Text);
        }

        private void InsertStockLog(Boolean type, Double quantity, Decimal price)
        {
            Random random = new Random();
            var storeLog = new Store_Log
            {
                ID = random.Next().ToString(),
                Price = price,
                Quantity = quantity,
                TransferDate = Convert.ToDateTime(DateTime.Now.ToShortDateString()),
                TypeIE = type,
                StoreID = lblIdStore.Text
            };

            context.Store_Logs.InsertOnSubmit(storeLog);
        }

        public void Update()
        {
            SelectWareHouse();
        }
    }
}
